package Classe;

import java.util.ArrayList;
import Classe.Chambre;
import Classe.ChambreCategorie;

public class Hotel {
	
	public static final int NB_PENTHOUSE = 1;
	public static final int NB_CHAMBRELUXE = 5;
	public static final int NB_CHAMBREDOUBLE = 10;
	public static final int NB_CHAMBRESIMPLE = 10;
	
	public static final int MOIS_DEBUT_HAUTE_SAISON = 1;
	public static final int MOIS_FIN_HAUTE_SAISON = 6;
	public static final int MOIS_DEBUT_BASSE_SAISON = 7;
	public static final int MOIS_FIN_BASSE_SAISON = 12;
	
	public static Hotel m_Instance;
	
	public ArrayList<Chambre> m_chambreListe;
	public ArrayList<Facture> m_factureListe;
	
	private Hotel()
	{
		int cpt = 1;
		m_chambreListe = new ArrayList<Chambre>();
		
		for (int i = 0; i < NB_PENTHOUSE; i++) {
			AjouterChambre(cpt, ChambreCategorie.CategorieChambre.Penthouse);
			cpt++;
		}
		
		for (int i = 0; i < NB_CHAMBRELUXE; i++) {
			AjouterChambre(cpt, ChambreCategorie.CategorieChambre.ChambreLuxe);
			cpt++;
		}
		
		for (int i = 0; i < NB_CHAMBREDOUBLE; i++) {
			AjouterChambre(cpt, ChambreCategorie.CategorieChambre.ChambreDouble);
			cpt++;
		}
		
		for (int i = 0; i < NB_CHAMBRESIMPLE; i++) {
			AjouterChambre(cpt, ChambreCategorie.CategorieChambre.ChambreSimple);
			cpt++;
		}
	}
	public static Hotel getInstance()
	{
		if (m_Instance == null)
			m_Instance = new Hotel();
		return m_Instance;		
	}
	public final ArrayList<Chambre> getListChambre()
	{
		return m_chambreListe;
	}
	public final ArrayList<Facture> getFactureListe()
	{
		return m_factureListe;
	}
	@SuppressWarnings("unchecked")
	public ArrayList<Chambre> getCloneListChambre()
	{
		return (ArrayList<Chambre>)m_chambreListe.clone();
	}
	private void AjouterChambre(int pNumeroChambre, ChambreCategorie.CategorieChambre pChambreCategorie)
	{
		m_chambreListe.add(new Chambre(pNumeroChambre, pChambreCategorie));
	}
	public Chambre getChambre(int noChambre)
	{
		for (Chambre chambreCourante : m_chambreListe) {
			if (chambreCourante.getNumeroChambre() == noChambre) {
				return chambreCourante;
			}
		}
		return null;
	}
}
